class Watcher {
  constructor(vm, key, cb) {
    this.vm = vm;
    this.key = key;
    // 回调函数负责更新视图
    this.cb = cb;

    // 把 watch 对象记录到 Dep 类的静态属性 target 中
    Dep.target = this;
    // 触发 observer 的 get 方法, 在 get 方法中会调用 addSub
    this.oldValue = vm[key];
    Dep.target = null;
  }

  // 当数据发生变化时更新视图
  update() {
    let newValue = this.vm[this.key];

    // ❓ 这个判断的意义并不大, 因为 this.oldValue 永远是初始值, 并不是表单中的 preValue
    if (this.oldValue === newValue) {
      return;
    }
    this.cb(newValue);
  }
}
